<?php
class Planes extends MY_Controller {

	// Datos para pasar a las vistas
	var $pageTitle = 'Prevet :: Parámetros';
	var $nombre_entidad = 'Plan';		// Cadena utilizada para los títulos de las páginas

	// Vistas manejadas por el controlador
	var $CARPETA_VISTAS = 'parametros/'; 	// Directorio donde están contenidas las vistas gestionadas por el controlador
	var $pagina_editar; 					// Nombre de la vista de edición
	var $pagina_ver_todos;						// Nombre de la vista para mostrar todos
	var $pagina_ver;						// Nombre de la vista para mostrar uno solo
	var $pagina_editar_plan_prestacion;

	public function __construct()
    {
    	parent::__construct();

    	$this->pagina_editar = $this->CARPETA_VISTAS . 'plan_edit_view';
    	$this->pagina_ver_todos = $this->CARPETA_VISTAS . 'plan_ver_todos_view';
    	$this->pagina_ver = $this->CARPETA_VISTAS . 'plan_ver_view';
    	$this->pagina_editar_plan_prestacion = $this->CARPETA_VISTAS . 'plan_prestacion_edit_view';
	}
	
	public function nuevo()
	{
		$dataView['title'] = 'Agregar ' . $this->nombre_entidad;
		$dataView['id_elemento'] = NULL; 	// IMPORTANTE: debe ser nulo para uno nuevo

		$this->_cargarFormEdicion($dataView);
	}

	public function editar($id_elemento, $vista_ver = FALSE)
	{
		$dataView['title'] = 'Editar ' . $this->nombre_entidad;
		$dataView['id_elemento'] = $id_elemento;

		// El form modal se llamó desde el VER de un plan, se debe volver a esa vista
		if($vista_ver) $dataView['vista_ver'] = TRUE;

		$this->_cargarFormEdicion($dataView);
	}

	private function _cargarFormEdicion($dataView, $cargaCompleta = FALSE)
	{
		if(!isset($dataView['obj'.$this->nombre_entidad]))
		{
			$id_elemento = $dataView['id_elemento'];

			// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
			$obj_plan = new Plan($id_elemento);
			$dataView['obj'.$this->nombre_entidad] = $obj_plan;
		}

		// Creo un objeto del modelo, para poder buscar todos los datos en la BD
		$obj_especie = new Especie();
		$dataView['listado_especies'] = $obj_especie->get_iterated();

		if($cargaCompleta) $dataView['modalDesactivado'] = TRUE;

		parent::_loadViews($this->pagina_editar, $dataView, $cargaCompleta);
	}

	public function ver($id_elemento)
	{
		$dataView['title'] = 'Ver ' . $this->nombre_entidad;

		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$obj_plan = new Plan($id_elemento);
		$dataView['obj'.$this->nombre_entidad] = $obj_plan;

		$dataView['listado_prestaciones'] = $obj_plan->plan_prestacion->get();

		parent::_loadViews($this->pagina_ver, $dataView);
	}

	public function guardar()
	{
		$dataView['title'] = 'Guardar ' . $this->nombre_entidad;
		$dataView['error'] = '';

		$volver_vista_ver = $this->input->post('vista_ver');

		// Se obtienen los datos del formulario para poblar el modelo
		$id_plan = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		$obj_plan = new Plan($id_plan);
		$obj_plan->nombre = $this->input->post('txt_nombre');
		$obj_plan->cant_meses_duracion = $this->input->post('txt_cant_meses');
		$obj_plan->importe_total = $this->input->post('txt_importe_total');
		$obj_plan->importe_cuota = $this->input->post('txt_cuota');
		$obj_plan->vigencia_desde = $this->input->post('txt_desde');
		$obj_plan->fecha_baja = $this->input->post('txt_baja');

		if($id_plan == 0 || $id_plan == NULL) $obj_plan->fecha_creacion = date('Y-m-d H:i:s');

		// Defino el objeto que se desea asociar
		$id_especie = is_numeric($this->input->post('txt_especie')) ? $this->input->post('txt_especie') : NULL;
		$obj_especie = new Especie($id_especie);

		// Se manejan transacciones para interactuar con la BD
		$obj_plan->trans_begin();
		$operacion_exitosa = $obj_plan->save($obj_especie);
		if(!$operacion_exitosa && !$obj_plan->valid) // Falló la validación de datos
		{
			// Vuelvo a cargar el formulario de edición y mostrar los errores de validación
			$dataView['obj'.$this->nombre_entidad] = $obj_plan;
			$dataView['error'] = $obj_plan->error->string;
			$this->_cargarFormEdicion($dataView, TRUE);
		}
		else
		{
			if ($obj_plan->trans_status() === FALSE) // Se chequea el estado de la transacción
			{
			    $obj_plan->trans_rollback(); // Si la transacción falló, hago un rollback
			    $dataView['error'] = $obj_plan->error->string; // Almaceno todos los errores que hubieran podido ocurrir
			}
			else
			{
			    $obj_plan->trans_commit(); // Transacción exitosa, realizo el commit
			}
		}

		if($volver_vista_ver) $this->ver($obj_plan->id);
		else $this->ver_todos($dataView);
	}

	public function ver_todos($dataView = array())
	{
		$dataView['title'] = 'Listado de ' . $this->nombre_entidad . 'es';

		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$obj_plan = new Plan();
		$obj_plan->get_iterated(); // Obtengo todos los elementos

		$dataView['listado'] = $obj_plan;
		parent::_loadViews($this->pagina_ver_todos, $dataView);
	}

	public function establecer_baja($id_elemento)
	{
		$dataView['title'] = 'Dar de baja ' . $this->nombre_entidad;
		$dataView['error'] = '';

		if($this->validarEliminacion($id_elemento))
		{
			// Se obtiene el objeto que se desea eliminar
			$obj_plan = new Plan($id_elemento);

			if($obj_plan->fecha_baja == NULL) {
				$obj_plan->fecha_baja = date('d/m/Y');

				// Se manejan transacciones para interactuar con la BD
				$obj_plan->trans_begin();
				$obj_plan->save();
				if ($obj_plan->trans_status() === FALSE) // Se chequea el estado de la transacción
				{
				    $obj_plan->trans_rollback(); // Si la transacción falló, hago un rollback
				}
				else
				{
				    $obj_plan->trans_commit(); // Transacción exitosa, realizo el commit
				}

				$dataView['error'] = $obj_plan->error->string; // Almaceno todos los errores que hubieran podido ocurrir
			}

			$this->ver_todos($dataView);
		}
		else
		{
			$dataView['error'] = 'No se puede dar de baja el plan elegido.';
			$dataView['path_volver'] = 'planes/ver_todos';
			parent::_loadViews($this->template->getErrorMessageView(), $dataView);
		}
	}

	/* IMPORTANTE: este método es llamado desde la función heredada de MY_Controller, "borradoPosible" */
	protected function validarEliminacion($id_elemento)
	{
		return TRUE;
	}
}